//通过翻转子数组使两个数组相等
/*给你两个长度相同的整数数组 target 和 arr 。每一步中，你可以选择 arr 的任意 非空子数组 并将它翻转。你可以执行此过程任意次。

如果你能让 arr 变得与 target 相同，返回 True；否则，返回 False 。
target.length == arr.length
1 <= target.length <= 1000
1 <= target[i] <= 1000
1 <= arr[i] <= 1000
*/
bool canBeEqual(int* target, int targetSize, int* arr, int arrSize) {
    int* harsh = (int*)calloc(1001, sizeof(int));
    for (int i = 0; i < targetSize; i++) {
        harsh[target[i]]++;
    }
    for (int i = 0; i < arrSize; i++) {
        harsh[arr[i]]--;
        if (harsh[arr[i]] < 0)
            return false;
    }
    return true;
}
//此题是查找两数组是否有相同的数字。


//特殊元素平方和
/*给你一个下标从 1 开始、长度为 n 的整数数组 nums 。

对 nums 中的元素 nums[i] 而言，如果 n 能够被 i 整除，即 n % i == 0 ，则认为 num[i] 是一个 特殊元素 。

返回 nums 中所有 特殊元素 的 平方和 。
1 <= nums.length == n <= 50
1 <= nums[i] <= 50
*/
int sumOfSquares(int* nums, int numsSize) {
    int sum = 0;
    for (int i = 1; i <=numsSize; i++) {
        if (numsSize % i == 0) {
            sum += nums[i-1] * nums[i-1];
        }
    }
    return sum;
}
//此题注意是下标为1即可。